// 基础查询示例

// 查看所有节点数量
MATCH (n) 
RETURN labels(n) as 节点类型, count(*) as 数量;

// 查看所有关系数量
MATCH ()-[r]->() 
RETURN type(r) as 关系类型, count(*) as 数量;

// 查询某个特定角色的所有信息
MATCH (c:Character {FSN: '孙悟空'})
RETURN c;

// 查询某个角色拥有的所有武器
MATCH (c:Character)-[r:HAS_WEAPON]->(w:Weapon)
WHERE c.FSN = '孙悟空'
RETURN c.FSN as 角色, w.FSN as 武器;

// 查询某个角色拥有的所有技能
MATCH (c:Character)-[r:HAS_SKILL]->(s:Skill)
WHERE c.FSN = '孙悟空'
RETURN c.FSN as 角色, s.FSN as 技能;

// 查询某个角色所在的位置
MATCH (c:Character)-[r:LOCATED_IN]->(l:Location)
WHERE c.FSN = '孙悟空'
RETURN c.FSN as 角色, l.FSN as 位置;

// 查询拥有特定技能的所有角色
MATCH (c:Character)-[r:HAS_SKILL]->(s:Skill)
WHERE s.FSN = '七十二变'
RETURN c.FSN as 角色;

// 查询某个位置的所有角色
MATCH (c:Character)-[r:LOCATED_IN]->(l:Location)
WHERE l.FSN = '花果山'
RETURN c.FSN as 角色;

// 查询角色的完整信息（包括武器、技能和位置）
MATCH (c:Character)
OPTIONAL MATCH (c)-[r1:HAS_WEAPON]->(w:Weapon)
OPTIONAL MATCH (c)-[r2:HAS_SKILL]->(s:Skill)
OPTIONAL MATCH (c)-[r3:LOCATED_IN]->(l:Location)
WHERE c.FSN = '孙悟空'
RETURN c.FSN as 角色, 
       collect(DISTINCT w.FSN) as 武器列表,
       collect(DISTINCT s.FSN) as 技能列表,
       collect(DISTINCT l.FSN) as 位置;

// 查找具有相同位置的角色对
MATCH (c1:Character)-[:LOCATED_IN]->(l:Location)<-[:LOCATED_IN]-(c2:Character)
WHERE c1.id < c2.id  // 避免重复
RETURN c1.FSN as 角色1, c2.FSN as 角色2, l.FSN as 共同位置;

// 查找拥有最多技能的角色
MATCH (c:Character)-[:HAS_SKILL]->(s:Skill)
WITH c, count(s) as 技能数量
RETURN c.FSN as 角色, 技能数量
ORDER BY 技能数量 DESC
LIMIT 5;
